package com.lyh.notes.service;

import com.lyh.notes.model.base.ApiResponse;
import com.lyh.notes.model.base.EmptyVO;
import com.lyh.notes.model.dto.note.CreateNoteRequest;
import com.lyh.notes.model.dto.note.NoteQueryRequest;
import com.lyh.notes.model.dto.note.UpdateNoteRequest;
import com.lyh.notes.model.vo.note.*;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.Valid;
import java.util.List;

@Transactional
public interface NoteService {
    /**
     * 查询笔记列表
     *
     */
    ApiResponse<List<NoteVO>> getNotes(@Valid NoteQueryRequest params);

    /**
     * 发布笔记
     *
     */
    ApiResponse<CreateNoteVO> createNote(CreateNoteRequest request);

    /**
     * 更新笔记
     *
     */
    ApiResponse<EmptyVO> updateNote(Integer noteId, UpdateNoteRequest request);

    /**
     * 删除笔记
     *
     */
    ApiResponse<EmptyVO> deleteNote(Integer noteId);

    /**
     * 下载笔记
     */
    ApiResponse<DownloadNoteVO> downloadNote();

    /**
     * 笔记排行榜
     */
    ApiResponse<List<NoteRankListItem>> submitNoteRank();

    /**
     * 用户提交热力图
     */
    ApiResponse<List<NoteHeatMapItem>> submitNoteHeatMap();

    /**
     * 用户提交top3Count
     */
    ApiResponse<Top3Count> submitNoteTop3Count();

}
